/**
 * 作者：
 * 创建时间：2012-6-26 下午2:41:51
 */
package dragon.model.bizObject;

import dragon.model.base.Model;
import dragon.model.base.ModelDescribe;
import dragon.model.fieldTemplate.FieldTemplate;

/**
 * 列表查询字段定义
 */
public class QueryField extends Model {

	/**
	 * 连接符(AND, OR)
	 */
	@ModelDescribe(annotation = "连接符(AND, OR)")
	private Connector connector = Connector.AND;

	/**
	 * 操作符(默认是等号 = )
	 */
	@ModelDescribe(annotation = "操作符(默认是等号 = )")
	private String operator = "=";

	/**
	 * 默认的参数值(如果没有提供参数值则用此默认值代替)
	 */
	@ModelDescribe(annotation = "默认的参数值(如果没有提供参数值则用此默认值代替)")
	private String defaultValue;

	/**
	 * 自定义查询语句，参数值通过 ? 占位
	 */
	@ModelDescribe(annotation = "自定义查询语句，参数值通过 ? 占位")
	private String clause;

	/**
	 * 默认自定义查询语句(当取不到参数值时，用此自定义查询语句)
	 */
	@ModelDescribe(annotation = "默认自定义查询语句(当取不到参数值时，用此自定义查询语句)")
	private String defaultClause;

	/**
	 * 所属条件组<br>
	 * 在复杂的sql语句中，有可能存在多条子句，这样就有可能有多个查询条件设置，通过group来设置查询字段所属的语句
	 */
	@ModelDescribe(annotation = "所属条件组<br>在复杂的sql语句中，有可能存在多条子句，这样就有可能有多个查询条件设置，通过group来设置查询字段所属的语句")
	private String group = "conditions";

	/**
	 * 字段模板
	 */
	@ModelDescribe(annotation = "字段模板")
	private FieldTemplate fieldTemplate;

	/**
	 * 是否只读(0否，1是)
	 */
	@ModelDescribe(annotation = "是否只读(0否，1是)")
	private int isReadonly = 0;

	@Override
	public String toString() {
		StringBuilder str = new StringBuilder();
		str.append(super.toString());
		str.append("dragon.model.bizObject.QueryField:");
		str.append("connector=").append(connector).append("\t");
		str.append("operator:").append(operator).append("\t");
		str.append("value=").append(defaultValue).append("\t");
		str.append("clause=").append(clause).append("\t");
		str.append("group=").append(group).append("\t");
		str.append("isReadonly=").append(isReadonly).append("\t");
		str.append("fieldTemplate=\n{\n").append(fieldTemplate).append("\n}\n");
		return str.toString();
	}

	@Override
	public String toHtmlString() {
		StringBuilder str = new StringBuilder();
		str.append(super.toHtmlString());
		str.append("dragon.model.bizObject.QueryField:<br/>");
		str.append("connector=").append(connector).append("&nbsp;&nbsp;");
		str.append("operator=").append(operator).append("&nbsp;&nbsp;");
		str.append("defaultValue=").append(defaultValue).append("&nbsp;&nbsp;");
		str.append("clause=").append(clause).append("&nbsp;&nbsp;");
		str.append("defaultClause=").append(defaultClause).append("&nbsp;&nbsp;");
		str.append("group=").append(group).append("&nbsp;&nbsp;");
		str.append("fieldTemplate=").append(fieldTemplate != null ? fieldTemplate.toHtmlString() : null).append("&nbsp;&nbsp;");
		str.append("isReadonly=").append(isReadonly).append("&nbsp;&nbsp;");
		str.append("<br/>");
		return str.toString();
	}

	/**
	 * @return the clause
	 */
	public String getClause() {
		return clause;
	}

	/**
	 * @param clause
	 *            the clause to set
	 */
	public void setClause(String clause) {
		this.clause = clause;
	}

	/**
	 * @return the connector
	 */
	public Connector getConnector() {
		return connector;
	}

	/**
	 * @param connector
	 *            the connector to set
	 */
	public void setConnector(Connector connector) {
		this.connector = connector;
	}

	/**
	 * @return the operator
	 */
	public String getOperator() {
		return operator;
	}

	/**
	 * @param operator
	 *            the operator to set
	 */
	public void setOperator(String operator) {
		this.operator = operator;
	}

	/**
	 * @return the group
	 */
	public String getGroup() {
		return group;
	}

	/**
	 * @param group
	 *            the group to set
	 */
	public void setGroup(String group) {
		this.group = group;
	}

	/**
	 * @return the fieldTemplate
	 */
	public FieldTemplate getFieldTemplate() {
		return fieldTemplate;
	}

	/**
	 * @param fieldTemplate
	 *            the fieldTemplate to set
	 */
	public void setFieldTemplate(FieldTemplate fieldTemplate) {
		this.fieldTemplate = fieldTemplate;
	}

	/**
	 * @return the defaultValue
	 */
	public String getDefaultValue() {
		return defaultValue;
	}

	/**
	 * @param defaultValue
	 *            the defaultValue to set
	 */
	public void setDefaultValue(String defaultValue) {
		this.defaultValue = defaultValue;
	}

	/**
	 * @return the defaultClause
	 */
	public String getDefaultClause() {
		return defaultClause;
	}

	/**
	 * @param defaultClause
	 *            the defaultClause to set
	 */
	public void setDefaultClause(String defaultClause) {
		this.defaultClause = defaultClause;
	}

	/**
	 * @return the isReadonly
	 */
	public int getIsReadonly() {
		return isReadonly;
	}

	/**
	 * @param isReadonly
	 *            the isReadonly to set
	 */
	public void setIsReadonly(int isReadonly) {
		this.isReadonly = isReadonly;
	}
}
